﻿using System;
using System.Collections.Generic;

namespace GUI.BR
{
    using EXT;
    using DAL.Entities;
    using BLL;
    using System.Data;

    public partial class frmHanghoa : GUI.Danhmuc.ChitietDanhmuc.frmInputChitietDanhmuc
    {
        bool CorE;
        public frmHanghoa(bool CorE)
        {
            this.CorE = CorE;
            InitializeComponent();
        }

        HanghoaBLL Hanghoa_BLL = new HanghoaBLL();
        GiahanghoaBLL Giahanghoa_BLL = new GiahanghoaBLL();

        private void Load_Loaihang()
        {
            DanhmucBLL Danhmuc_BLL = new DanhmucBLL();
            DataTable dt = Danhmuc_BLL.Danhmuc_Select_By_Kind_All_Vali("Loaihang");
            if (dt.Rows.Count>0)
            {
                gleLoaihang.Properties.DataSource = dt;
            }
        }

        public void Load_Dvt()
        {
            DanhmucBLL Danhmuc_BLL = new DanhmucBLL();
            DataTable dt = Danhmuc_BLL.Danhmuc_Select_By_Kind_All_Vali("Donvitinh");
            if (dt.Rows.Count > 0)
            {
                gleDvt0.Properties.DataSource = dt;
                gleDvt1.Properties.DataSource = dt;
                gleDvt2.Properties.DataSource = dt;
            }
        }

        private bool ValiInput()
        {
            if (gleLoaihang.Text.Trim()=="")
            {
                MsgC.MsgWarning("Chưa chọn loại hàng!");
                gleLoaihang.Focus();
                return false;
            }
            if (txtMa.Text.Trim()=="")
            {
                MsgC.MsgWarning("Chưa nhập mã hàng hóa");
                txtMa.Focus();
                return false;
            }
            if (CorE)
            {
                if (Hanghoa_BLL.IsExists(txtMa.Text.Trim()))
                {
                    MsgC.MsgWarning("Mã hàng đã tồn tại\n\n Vui lòng nhập mã khác");
                    txtMa.Focus();
                    return false;
                }
            }
            else
                if (Hanghoa_BLL.IsExists(frmChitietHanghoa.DR["Id"].GetGuid(),txtMa.Text.Trim()))
                {
                    MsgC.MsgWarning("Mã hàng đã tồn tại\n\n Vui lòng nhập mã khác");
                    txtMa.Focus();
                    return false;
                }
            if (txtTen.Text.Trim()=="")
            {
                MsgC.MsgWarning("Chưa nhập tên hàng hóa");
                txtTen.Focus();
                return false;
            }
            if (gleDvt0.Text.Trim()=="")
            {
                MsgC.MsgWarning("Chưa chọn đơn vị tính cơ bản");
                gleDvt0.Focus();
                return false;
            }
            if (txtGiaxuatL.Text.Trim()=="")
            {
                MsgC.MsgWarning("Chưa nhập giá xuất lẽ");
                txtGiaxuatL.Focus();
                return false;
            }
            if (txtGiaxuatS.Text.Trim()=="")
            {
                MsgC.MsgWarning("Chưa nhập giá xuất sĩ");
                txtGiaxuatS.Focus();
                return false;
            }
            return true;
        }

        private void ResetInput()
        {
            gleLoaihang.EditValue = null;
            txtMa.EditValue = null;
            txtTen.EditValue = null;
            txtMota.EditValue = null;
            gleDvt0.EditValue = null;
            txtSoluong.EditValue = null;
            txtGianhap.EditValue = null;
            txtGiaxuatL.EditValue = 0;
            txtGiaxuatS.EditValue = 0;
            gleDvt1.EditValue = null;
            txtDoi1.EditValue = null;
            gleDvt2.EditValue = null;
            txtDoi2.EditValue = null;
            txtSoluongMin.EditValue = 1;
            txtGhichu.EditValue = null;
        }

        private void BindingData()
        {
            DataRow dr = frmChitietHanghoa.DR;
            gleLoaihang.EditValue = dr["Id_Loaihang"].GetGuid();
            txtMa.EditValue = dr["Ma"].ToString();
            txtTen.EditValue = dr["Ten"].ToString();
            txtMota.EditValue = dr["Mota"].ToString();
            gleDvt0.EditValue = dr["Id_Dvt0"].GetGuid();
            txtSoluong.EditValue = dr["Soluong"].ToString();
            txtGianhap.EditValue = dr["Gianhap"].ToString();
            txtGiaxuatL.EditValue = dr["GiaxuatL"].ToString();
            txtGiaxuatS.EditValue = dr["GiaxuatS"].ToString();
            gleDvt1.EditValue = dr["Id_Dvt1"].GetGuid();
            gleDvt2.EditValue = dr["Id_Dvt2"].GetGuid();
            txtDoi1.EditValue = dr["Doi1"].ToString();
            txtDoi2.EditValue = dr["Doi2"].ToString();
            txtCK.EditValue = dr["CK"].ToString();
            txtSoluongMin.EditValue = dr["SoluongMin"].ToString();
            txtGhichu.EditValue = dr["Ghichu"].ToString();
        }

        private void frmHanghoa_Load(object sender, EventArgs e)
        {
            Load_Loaihang();
            Load_Dvt();
            if (CorE)
            {
                ResetInput();
                this.Text = "Thêm hàng hóa";
            }
            else
            {
                BindingData();
                this.Text = "Sữa thông tin hàng hóa";
            }
        }

        private void btnDong_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        public event MyEvent_LoadData MyEvent_LoadData_DanhsachHH = null;

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (ValiInput())
            {
                Hanghoa hh = new Hanghoa();

                hh.Id_Loaihang = gleLoaihang.EditValue.GetGuid();
                hh.Ma = txtMa.Text.Trim().ToUpper();
                hh.Vach = txtVach.Text;
                hh.Ten = txtTen.Text.Trim().ToUpperFirst();

                if (txtMota.Text.Trim()!="")
                {
                    hh.Mota = txtMota.Text.Trim().ToUpperFirst();
                }

                hh.Id_Dvt0 = gleDvt0.EditValue.GetGuid();

                if (txtGianhap.Text.Trim()!="")
                {
                    hh.Gianhap = txtGianhap.EditValue.ToInt32();
                }

                if (txtGiaxuatL.Text.Trim()!="")
                {
                    hh.GiaxuatL = txtGiaxuatL.EditValue.ToInt32();
                }

                if (txtGiaxuatS.Text.Trim()!="")
                {
                    hh.GiaxuatS = txtGiaxuatS.EditValue.ToInt32();
                }

                if (gleDvt1.Text.Trim()!="")
                {
                    hh.Id_Dvt1 = gleDvt1.EditValue.GetGuid();
                }

                if (txtDoi1.Text.Trim()!="")
                {
                    hh.Doi1 = (float)txtDoi1.EditValue.ToDecimal();
                }

                if (gleDvt2.Text.Trim() != "")
                {
                    hh.Id_Dvt2 = gleDvt2.EditValue.GetGuid();
                }

                if (txtDoi2.Text.Trim() != "")
                {
                    hh.Doi2 = (float)txtDoi2.EditValue.ToDecimal();
                }

                if (txtSoluongMin.Text.Trim()!="")
                {
                    hh.SoluongMin = (float)txtSoluongMin.EditValue.ToDecimal();
                }

                if (txtGhichu.Text.Trim()!="")
                {
                    hh.Ghichu = txtGhichu.Text.Trim().ToUpperFirst();
                }

                if (txtCK.Text.Trim() == "")
                {
                    hh.CK = 0;
                }
                else
                    hh.CK = txtCK.EditValue.ToInt32();

                Hanghoa_BLL._sqlMapper.BeginTransaction();

                if (CorE)
                {
                    hh.Show = true;
                    hh.Id = Guid.NewGuid();
                    if (Hanghoa_BLL.Hanghoa_Insert(hh))
                    {
                        Giahanghoa ghh = new Giahanghoa();
                        ghh.Id = Guid.NewGuid();
                        ghh.Id_HH = hh.Id;
                        ghh.Ngay = DateTime.Now;
                        ghh.GiaxuatL = hh.GiaxuatL;
                        ghh.GiaxuatS = hh.GiaxuatS;
                        ghh.Id_Nhanvien = MAIN.Id;
                        if (Giahanghoa_BLL.Giahanghoa_Insert(ghh))
                        {
                            MsgC.MsgOK("Thêm hàng hóa thành công");
                            ResetInput();
                            Hanghoa_BLL._sqlMapper.CommitTransaction();
                            if (MyEvent_LoadData_DanhsachHH != null)
                            {
                                MyEvent_LoadData_DanhsachHH(this, new ELoadData() { IsLoadData = true });
                            }
                        }
                        else
                        {
                            MsgC.MsgOK("Không thể kết nối tới CSDL");
                            Hanghoa_BLL._sqlMapper.RollBackTransaction();
                        }
                    }
                    else
                    {
                        MsgC.MsgOK("Không thể kết nối tới CSDL");
                        Hanghoa_BLL._sqlMapper.RollBackTransaction();
                    }
                }
                else
                {
                    hh.Id = frmChitietHanghoa.DR["Id"].GetGuid();
                    if (Hanghoa_BLL.Hanghoa_Update(hh))
                    {
                        if (frmChitietHanghoa.DR["GiaxuatL"].ToInt32() != txtGiaxuatL.EditValue.ToInt32() || frmChitietHanghoa.DR["GiaxuatS"].ToInt32() != txtGiaxuatS.EditValue.ToInt32())
                        {
                            Giahanghoa ghh = new Giahanghoa();
                            ghh.Id = Guid.NewGuid();
                            ghh.Id_HH = hh.Id;
                            ghh.Ngay = DateTime.Now;
                            ghh.GiaxuatL = hh.GiaxuatL;
                            ghh.GiaxuatS = hh.GiaxuatS;
                            ghh.Id_Nhanvien = MAIN.Id;
                            if (Giahanghoa_BLL.Giahanghoa_Insert(ghh))
                            {
                                MsgC.MsgOK("Sữa thông tin hàng hóa thành công");
                                Hanghoa_BLL._sqlMapper.CommitTransaction();
                                if (MyEvent_LoadData_DanhsachHH != null)
                                {
                                    MyEvent_LoadData_DanhsachHH(this, new ELoadData() { IsLoadData = true });
                                }
                                this.Close();
                            }
                            else
                            {
                                MsgC.MsgOK("Không thể kết nối tới CSDL");
                                Hanghoa_BLL._sqlMapper.RollBackTransaction();
                            }
                        }
                        else
                        {
                            Hanghoa_BLL._sqlMapper.CommitTransaction();
                            MsgC.MsgOK("Sữa thông tin hàng hóa thành công");
                            if (MyEvent_LoadData_DanhsachHH != null)
                            {
                                MyEvent_LoadData_DanhsachHH(this, new ELoadData() { IsLoadData = true });
                            }
                            this.Close();
                        }
                    }
                    else
                    {
                        MsgC.MsgOK("Không thể kết nối tới CSDL");
                        Hanghoa_BLL._sqlMapper.RollBackTransaction();
                    }
                }
            }
        }

        private void gleLoaihang_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (e.Button.Index==1)
            {
                GUI.Danhmuc.frmLoaihang frm = new GUI.Danhmuc.frmLoaihang();
                frm.MyEvent_LoadData_Chitiet += new MyEvent_LoadData(frm_MyEvent_LoadData_Chitiet);
                frm.ShowDialog();
            }
        }

        void frm_MyEvent_LoadData_Chitiet(object sender, ELoadData e)
        {
            Load_Loaihang();
        }

        private void gleDvt0_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (e.Button.Index==1)
            {
                GUI.Danhmuc.frmDonvitinh frmdvt0 = new GUI.Danhmuc.frmDonvitinh();
                frmdvt0.MyEvent_LoadData_Chitiet += new MyEvent_LoadData(frmdvt0_MyEvent_LoadData_Chitiet);
                frmdvt0.ShowDialog();
            }
        }

        void frmdvt0_MyEvent_LoadData_Chitiet(object sender, ELoadData e)
        {
            Load_Dvt();
        }

        private void gleDvt1_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (e.Button.Index == 1)
            {
                GUI.Danhmuc.frmDonvitinh frmdvt1 = new GUI.Danhmuc.frmDonvitinh();
                frmdvt1.MyEvent_LoadData_Chitiet += new MyEvent_LoadData(frmdvt1_MyEvent_LoadData_Chitiet);
                frmdvt1.ShowDialog();
            }
        }

        void frmdvt1_MyEvent_LoadData_Chitiet(object sender, ELoadData e)
        {
            Load_Dvt();
        }

        private void gleDvt2_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (e.Button.Index == 1)
            {
                GUI.Danhmuc.frmDonvitinh frmdvt2 = new GUI.Danhmuc.frmDonvitinh();
                frmdvt2.MyEvent_LoadData_Chitiet += new MyEvent_LoadData(frmdvt2_MyEvent_LoadData_Chitiet);
                frmdvt2.ShowDialog();
            }
        }

        void frmdvt2_MyEvent_LoadData_Chitiet(object sender, ELoadData e)
        {
            Load_Dvt();
        }
    }
}
